package cn.icanci.loopstack.ras.common.enums;

import java.util.HashMap;
import java.util.Map;

/**
 * @author icanci
 * @since 1.0 Created in 2023/01/19 17:28
 */
public enum LoadBalanceTypeEnum {
                                 /**
                                  * 第一个
                                  */
                                 FIRST("FIRST", "第一个"),
                                 /**
                                  * 最后一个
                                  */
                                 LAST("LAST", "最后一个"),
                                 /**
                                  * 按顺序
                                  */
                                 IN_ORDER("IN_ORDER", "按顺序"),
                                 /**
                                  * 随机
                                  */
                                 RANDOM("RANDOM", "随机"),
                                 /**
                                  * 一致性哈希
                                  */
                                 CONSISTENCY_HASH("CONSISTENCY_HASH", "一致性哈希"),
                                 /**
                                  * 最不经常使用
                                  */
                                 LEAST_FREQUENTLY_USED("LEAST_FREQUENTLY_USED", "最不经常使用"),
                                 /**
                                  * 最近最久未使用
                                  */
                                 LEAST_RECENTLY_USED("LEAST_RECENTLY_USED", "最近最久未使用"),
                                 /**
                                  * 调用速度最快
                                  */
                                 FASTEST_CALL_SPEED("FASTEST_CALL_SPEED", "调用速度最快"),

    //
    ;

    private static final Map<String, LoadBalanceTypeEnum> ENUMS = new HashMap<>();

    static {
        LoadBalanceTypeEnum[] loadBalanceTypeEnums = LoadBalanceTypeEnum.values();

        for (LoadBalanceTypeEnum loadBalanceTypeEnum : loadBalanceTypeEnums) {
            ENUMS.put(loadBalanceTypeEnum.getCode(), loadBalanceTypeEnum);
        }
    }

    LoadBalanceTypeEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    private final String code;
    private final String desc;

    public String getCode() {
        return code;
    }

    public String getDesc() {
        return desc;
    }

    public static LoadBalanceTypeEnum getByCode(String code) {
        return ENUMS.get(code);
    }
}
